Realm Tech Talk with JP Simard 行ってきた


概要

素敵そうなモバイル用DB Realm(レルム)の話を聞きにいった。

これ。

http://realm.connpass.com/event/11815/

タグ #realm_jp

Realm is 何

モバイル用DB。

フルスクラッチ、完全新規なデータベース。SQLiteのラッパーではない。

4年かけてる。



フルスクラッチのモチベーション

サーバ側にはめっちゃ大量のDBエンジンが生まれているが、クライアント側には、、、

SQLiteから10年経っちゃったけど特にない。


CoreData、SQLiteのORMとしてはいいかんじだけど、、難しい、重い、遅い。

マルチプラットフォーム的に、Appleのモノなのでまあ、、はい、、


SQLiteを直に使う? できるけど、、、ORM的機能を求めていくとCore Dataに近づくだけ。

というかマジで機能が足りないしな、、


ほかにもいろいろな選択肢があるにはあるよな。


ベンチ

iPhone6での動作ベンチ。


insert

RealmはSQLiteより2倍遅いが、Obj-Cバインディング下なのでこの数値。

Realmの内部のC++部分をダイレクトにぶっ叩けばもっと速い。


count, query

Realmメッチャ速い。(x 2 SQLiteくらい)


高機能を保ちながら高速化するの頑張るよみたいな姿勢。



速さ

ディスクに対してのアクセスをもとにして速度を稼いでるっぽい。

メモリに乗っけない、ファイルに書く、というのを基礎にしている。

確かにサーバ上のDBと違って書き込む対象が絞られてる前提でこういう手段というか思い切りはアリだな~。

とにかくオンメモリに持たない、っていう手法。

(と思ったらon-memory-modeもあるらしい)



現在進行中のいろいろ

sync

デバイス間でiCloudみたいなシンクロができるようになる。

なにそれステキ。

→実装方法について詳しく聞く機会を得たので聞いてみたら、実装方法がメチャクチャファンキーだった。

・Webサービス、クライアントとUDPでデータやり取りしてサーバ上にデータをsync。

・オフラインでクライアント間の場合は、P2Pな感じでsync

ぉ、ぉぅ。


Webサービスまわりは野望が見え隠れするな。



coreのオープン化

まだバインディング部分(Java, Obj-C/Swift)がOpenになった形なので、コアも。



質疑応答

iOS側、Obj-Cっぽいメソッド名ってこのままなの?

→Swiftに書き替える形で名前変更中。

NSFetchResultみたいなものって用意されたりするの?

→groupedTableView ってサンプル見てくれみたいな

https://github.com/pietbrauer/CarthageRealmUploadFailureExample/tree/master/Carthage.checkout/realm-cocoa/examples/ios/objc/GroupedTableView


→通知に関しては、今頑張ってやってるぜ的。


なんでファイル直書きだと速いの?

→in-memory-optionもあるんだけど、説明しよう。

たとえばSQLiteだと、fetchとかでメモリ上にデータを読み出して、

その後Deserializeが行われ、、、ていう手間を経るが、

realmはそのへん省いているので速い。


速いベンチマーク見せてもらったけど、Realmが遅くなるケースってあるの?

→ある。

insertはSQLiteより遅い。

処理の部分的には、速いところがちょこちょこある。クエリ組み立てとか。

現在のシンプルさを保ったままもっと速くするように頑張っている。